package JDBC;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import modelo.Advogado;
import modelo.Cliente;
import DAO.AdvogadoDAO;

public class JdbcAdvogadoDAO implements AdvogadoDAO {

	private Connection connection;
	
	public JdbcAdvogadoDAO(Connection connection){
		this.connection = connection;
	}
	
	@Override
	public void insereAdvogado(Advogado advogado) {
		
		try{
			String sql = "insert into advogados " +
		     "(nome,cpf,telContato,celular,endereco,bairro,estado,cidade,cep,email,oab,estadoCivil,funcionario)" +
		     "VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?);";
			
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1,advogado.getNome());
			stmt.setString(2,advogado.getCpf());
			stmt.setString(3,advogado.getTelContato());
			stmt.setString(4,advogado.getCelular());
			stmt.setString(5,advogado.getEndereco());
			stmt.setString(6,advogado.getBairro());
			stmt.setString(7,advogado.getEstado());
			stmt.setString(8,advogado.getCidade());
			stmt.setString(9,advogado.getCep());
			stmt.setString(10,advogado.getEmail());
			stmt.setString(11,advogado.getOab());
			stmt.setString(12,advogado.getEstadoCivil());
			stmt.setString(13,advogado.getFuncionario());

			stmt.executeUpdate();

		}catch(SQLException e){
			e.printStackTrace();
			
		}
		
	}

	public List<Advogado> consultarAdvogadoNome(String texto) {
	
		List<Advogado> listaAdvogados = new ArrayList<Advogado>();
		
		try{
			
			PreparedStatement stmt = this.connection.prepareStatement("select * from advogados where nome like ?");
			stmt.setString(1,texto + "%");
			ResultSet rs = stmt.executeQuery();
			while (rs.next()) {
				
				Advogado advogado = new Advogado();
				advogado.setCodigoAdvogado(rs.getInt("codigoAdvogado"));
				advogado.setNome(rs.getString("nome"));
				advogado.setCpf(rs.getString("cpf"));
				advogado.setTelContato(rs.getString("telContato"));
				advogado.setCelular(rs.getString("celular"));
				advogado.setEndereco(rs.getString("endereco"));
				advogado.setBairro(rs.getString("bairro"));
				advogado.setEstado(rs.getString("estado"));
				advogado.setCidade(rs.getString("cidade"));
				advogado.setCep(rs.getString("cep"));
				advogado.setEmail(rs.getString("email"));
				advogado.setOab(rs.getString("oab"));
				advogado.setEstadoCivil(rs.getString("estadoCivil"));
				advogado.setFuncionario(rs.getString("funcionario"));
				
				listaAdvogados.add(advogado);
				
			}
			
		}catch (SQLException e) {
			e.printStackTrace();
		}
		
		return listaAdvogados;
	}
	
	public List<Advogado> consultarAdvogadoCPF(String texto) {
	
		List<Advogado> listaAdvogados = new ArrayList<Advogado>();
		
		try{
			
			PreparedStatement stmt = this.connection.prepareStatement("select * from advogados where cpf = ?");
			stmt.setString(1,texto);
			ResultSet rs = stmt.executeQuery();
			while (rs.next()) {
				
				Advogado advogado = new Advogado();
				advogado.setCodigoAdvogado(rs.getInt("codigoAdvogado"));
				advogado.setNome(rs.getString("nome"));
				advogado.setCpf(rs.getString("cpf"));
				advogado.setTelContato(rs.getString("telContato"));
				advogado.setCelular(rs.getString("celular"));
				advogado.setEndereco(rs.getString("endereco"));
				advogado.setBairro(rs.getString("bairro"));
				advogado.setEstado(rs.getString("estado"));
				advogado.setCidade(rs.getString("cidade"));
				advogado.setCep(rs.getString("cep"));
				advogado.setEmail(rs.getString("email"));
				advogado.setOab(rs.getString("oab"));
				advogado.setEstadoCivil(rs.getString("estadoCivil"));
				advogado.setFuncionario(rs.getString("funcionario"));
				
				listaAdvogados.add(advogado);
				
			}
			
		}catch (SQLException e) {
			e.printStackTrace();
		}
		
		return listaAdvogados;
		
	}
	
	public List<Advogado> consultarAdvogadoOAB(String texto) {
		
		List<Advogado> listaAdvogados = new ArrayList<Advogado>();
		
		try{
			
			PreparedStatement stmt = this.connection.prepareStatement("select * from advogados where oab = ?");
			stmt.setString(1,texto);
			ResultSet rs = stmt.executeQuery();
			while (rs.next()) {
				
				Advogado advogado = new Advogado();
				advogado.setCodigoAdvogado(rs.getInt("codigoAdvogado"));
				advogado.setNome(rs.getString("nome"));
				advogado.setCpf(rs.getString("cpf"));
				advogado.setTelContato(rs.getString("telContato"));
				advogado.setCelular(rs.getString("celular"));
				advogado.setEndereco(rs.getString("endereco"));
				advogado.setBairro(rs.getString("bairro"));
				advogado.setEstado(rs.getString("estado"));
				advogado.setCidade(rs.getString("cidade"));
				advogado.setCep(rs.getString("cep"));
				advogado.setEmail(rs.getString("email"));
				advogado.setOab(rs.getString("oab"));
				advogado.setEstadoCivil(rs.getString("estadoCivil"));
				advogado.setFuncionario(rs.getString("funcionario"));
				
				listaAdvogados.add(advogado);
				
			}
			
		}catch (SQLException e) {
			e.printStackTrace();
		}
		
		return listaAdvogados;
		
	}
	
	public void alteraDadosAdvogado(Advogado advogado){
		
		try{
			String sql = "update advogados set nome = ?," +
											  " cpf = ?," +
											  "telContato = ?," +
											  "celular = ?," +
											  "endereco = ?," +
											  "bairro = ?," +
											  "estado = ?," +
											  "cidade = ?," +
											  "cep = ?," +
											  "email = ?," +
											  "oab = ?," +
											  "estadoCivil = ?," +
											  "funcionario = ? " +
						" where codigoAdvogado = ? ";
			PreparedStatement stmt = this.connection.prepareStatement(sql);
			
			stmt.setString(1,advogado.getNome());
			stmt.setString(2,advogado.getCpf());
			stmt.setString(3,advogado.getTelContato());
			stmt.setString(4,advogado.getCelular());
			stmt.setString(5,advogado.getEndereco());
			stmt.setString(6,advogado.getBairro());
			stmt.setString(7,advogado.getEstado());
			stmt.setString(8,advogado.getCidade());
			stmt.setString(9,advogado.getCep());
			stmt.setString(10,advogado.getEmail());
			stmt.setString(11,advogado.getOab());
			stmt.setString(12,advogado.getEstadoCivil());
			stmt.setString(13,advogado.getFuncionario());
			stmt.setInt(14,advogado.getCodigoAdvogado());

			stmt.executeUpdate();
			
		}catch (SQLException e) {
				e.printStackTrace();
		}
		
	}
	
	public Advogado consultarAdvogadoCodigo(int codigoAdvogado){
		
		Advogado advogado = new Advogado();
		
		try{
			
			String sql = "select * from advogados where codigoAdvogado = ?";
			PreparedStatement stmt = this.connection.prepareStatement(sql);
			stmt.setInt(1, codigoAdvogado);
			
			ResultSet rs = stmt.executeQuery();
			rs.next();
			
			advogado.setCodigoAdvogado(rs.getInt("codigoAdvogado"));
			advogado.setNome(rs.getString("nome"));
			advogado.setCpf(rs.getString("cpf"));
			advogado.setTelContato(rs.getString("telContato"));
			advogado.setCelular(rs.getString("celular"));
			advogado.setEndereco(rs.getString("endereco"));
			advogado.setBairro(rs.getString("bairro"));
			advogado.setEstado(rs.getString("estado"));
			advogado.setCidade(rs.getString("cidade"));
			advogado.setCep(rs.getString("cep"));
			advogado.setEmail(rs.getString("email"));
			advogado.setOab(rs.getString("oab"));
			advogado.setEstadoCivil(rs.getString("estadoCivil"));
			advogado.setFuncionario(rs.getString("funcionario"));
			
			
			
		}catch (SQLException e) {
				e.printStackTrace();
		}
		
		return advogado;
	}
	
	public void excluirAdvogado(int codigoAdvogado){
		
	  try{
		  String sql = "delete from advogados where codigoAdvogado = ? ";
		  PreparedStatement stmt = this.connection.prepareStatement(sql);
		  stmt.setInt(1,codigoAdvogado);  
		  stmt.execute();
	  }catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

}
	
	

